home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / PIL / PcxImagePlugin.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  4KB  |  110 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. __version__ = '0.6'
  5. import Image
  6. import ImageFile
  7. import ImagePalette
  8.  
  9. def i16(c, o):
  10.     return ord(c[o]) + (ord(c[o + 1]) << 8)
  11.  
  12.  
  13. def _accept(prefix):
  14.     if ord(prefix[0]) == 10:
  15.         pass
  16.     return ord(prefix[1]) in (0, 2, 3, 5)
  17.  
  18.  
  19. class PcxImageFile(ImageFile.ImageFile):
  20.     format = 'PCX'
  21.     format_description = 'Paintbrush'
  22.     
  23.     def _open(self):
  24.         s = self.fp.read(128)
  25.         if not _accept(s):
  26.             raise SyntaxError, 'not a PCX file'
  27.         
  28.         bbox = (i16(s, 4), i16(s, 6), i16(s, 8) + 1, i16(s, 10) + 1)
  29.         if bbox[2] <= bbox[0] or bbox[3] <= bbox[1]:
  30.             raise SyntaxError, 'bad PCX image size'
  31.         
  32.         version = ord(s[1])
  33.         bits = ord(s[3])
  34.         planes = ord(s[65])
  35.         stride = i16(s, 66)
  36.         self.info['dpi'] = (i16(s, 12), i16(s, 14))
  37.         if bits == 1 and planes == 1:
  38.             mode = rawmode = '1'
  39.         elif bits == 1 and planes in (2, 4):
  40.             mode = 'P'
  41.             rawmode = 'P;%dL' % planes
  42.             self.palette = ImagePalette.raw('RGB', s[16:64])
  43.         elif version == 5 and bits == 8 and planes == 1:
  44.             mode = rawmode = 'L'
  45.             self.fp.seek(-769, 2)
  46.             s = self.fp.read(769)
  47.             if len(s) == 769 and ord(s[0]) == 12:
  48.                 for i in range(256):
  49.                     if s[i * 3 + 1:i * 3 + 4] != chr(i) * 3:
  50.                         mode = rawmode = 'P'
  51.                         break
  52.                         continue
  53.                 
  54.                 if mode == 'P':
  55.                     self.palette = ImagePalette.raw('RGB', s[1:])
  56.                 
  57.             
  58.             self.fp.seek(128)
  59.         elif version == 5 and bits == 8 and planes == 3:
  60.             mode = 'RGB'
  61.             rawmode = 'RGB;L'
  62.         else:
  63.             raise IOError, 'unknown PCX mode'
  64.         self.mode = mode
  65.         self.size = (bbox[2] - bbox[0], bbox[3] - bbox[1])
  66.         bbox = (0, 0) + self.size
  67.         self.tile = [
  68.             ('pcx', bbox, self.fp.tell(), (rawmode, planes * stride))]
  69.  
  70.  
  71. SAVE = {
  72.     '1': (2, 1, 1, '1'),
  73.     'L': (5, 8, 1, 'L'),
  74.     'P': (5, 8, 1, 'P'),
  75.     'RGB': (5, 8, 3, 'RGB;L') }
  76.  
  77. def o16(i):
  78.     return chr(i & 255) + chr(i >> 8 & 255)
  79.  
  80.  
  81. def _save(im, fp, filename, check = 0):
  82.     
  83.     try:
  84.         (version, bits, planes, rawmode) = SAVE[im.mode]
  85.     except KeyError:
  86.         raise ValueError, 'Cannot save %s images as PCX' % im.mode
  87.  
  88.     if check:
  89.         return check
  90.     
  91.     stride = (im.size[0] * bits + 7) / 8
  92.     screen = im.size
  93.     dpi = (100, 100)
  94.     fp.write(chr(10) + chr(version) + chr(1) + chr(bits) + o16(0) + o16(0) + o16(im.size[0] - 1) + o16(im.size[1] - 1) + o16(dpi[0]) + o16(dpi[1]) + chr(0) * 24 + chr(255) * 24 + chr(0) + chr(planes) + o16(stride) + o16(1) + o16(screen[0]) + o16(screen[1]) + chr(0) * 54)
  95.     ImageFile._save(im, fp, [
  96.         ('pcx', (0, 0) + im.size, 0, (rawmode, bits * planes))])
  97.     if im.mode == 'P':
  98.         fp.write(chr(12))
  99.         fp.write(im.im.getpalette('RGB', 'RGB'))
  100.     elif im.mode == 'L':
  101.         fp.write(chr(12))
  102.         for i in range(256):
  103.             fp.write(chr(i) * 3)
  104.         
  105.     
  106.  
  107. Image.register_open('PCX', PcxImageFile, _accept)
  108. Image.register_save('PCX', _save)
  109. Image.register_extension('PCX', '.pcx')
  110.